import argparse
import re
from typing import List
import sys
#本文件收到版权保护非本人允许禁止二改
#Mr.DaiJiaJun
print（"Mr.DaiJiaJun"）
class TextFileSearchTool:
    def __init__(self, file_path: str):
        """
        初始化文本文件检索工具。

        Args:
            file_path (str): 待检索的TXT文件路径。
        """
        try:
            with open(file_path, 'r', encoding='utf-8') as f:
                self.content = f.read()
        except FileNotFoundError:
            print(f"Error: File '{file_path}' not found.")
            sys.exit(1)

    def search_by_keyword(self, keyword: str, case_sensitive: bool = False) -> List[str]:
        """
        按关键词检索文本内容。

        Args:
            keyword (str): 要查找的关键词。
            case_sensitive (bool, optional): 是否区分大小写，默认为False（不区分）。

        Returns:
            list[str]: 匹配到的所有行（包含关键词的完整行）。
        """
        if not case_sensitive:
            keyword = keyword.lower()
            content = self.content.lower()

        return [line for line in self.content.split('\n') if keyword in line]

    def search_by_regex(self, pattern: str) -> List[str]:
        """
        按正则表达式检索文本内容。

        Args:
            pattern (str): 要匹配的正则表达式。

        Returns:
            list[str]: 匹配到的所有行（包含匹配内容的完整行）。
        """
        return [line for line in self.content.split('\n') if re.search(pattern, line)]


def colorize_output(lines: List[str], color: str) -> None:
    """
    使用ANSI转义码为输出文本添加颜色。

    Args:
        lines (List[str]): 要着色的文本行列表。
        color (str): 颜色名称，如 "green", "yellow", "red", etc.
    """
    colors = {
        "green": "\033[92m",
        "yellow": "\033[93m",
        "red": "\033[91m",
        "reset": "\033[0m"
    }

    color_code = colors.get(color, "")
    reset_code = colors["reset"]

    for line in lines:
        print(f"{color_code}{line}{reset_code}")


def main():
    parser = argparse.ArgumentParser(description="A command-line tool for searching text files.")
    parser.add_argument("file_path", help="Path to the text file to be searched.")
    parser.add_argument("-k", "--keyword", help="Search by keyword.")
    parser.add_argument("-r", "--regex", help="Search by regular expression.")
    parser.add_argument("--case-sensitive", action="store_true", help="Perform case-sensitive search.")
    args = parser.parse_args()

    if not (args.keyword or args.regex):
        print("Error: Either --keyword (-k) or --regex (-r) must be provided.")
        sys.exit(1)

    search_tool = TextFileSearchTool(args.file_path)

    if args.keyword:
        results = search_tool.search_by_keyword(args.keyword, args.case_sensitive)
        colorize_output(results, "green")
    elif args.regex:
        results = search_tool.search_by_regex(args.regex)
        colorize_output(results, "yellow")

if __name__ == "__main__":
    main()
